package com.school.sports.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.school.sports.entity.SysDictData;

import java.util.List;
import java.util.Map;

/**
 * 字典数据服务接口
 */
public interface SysDictDataService extends IService<SysDictData> {

    /**
     * 分页查询字典数据列表
     * @param currentPage 当前页码
     * @param pageSize 每页大小
     * @param sysDictData 查询条件
     * @return 分页结果
     */
    IPage<SysDictData> getDictDataPage(Integer currentPage, Integer pageSize, SysDictData sysDictData);

    /**
     * 根据字典类型ID查询字典数据列表
     * @param dictTypeId 字典类型ID
     * @return 字典数据列表
     */
    List<SysDictData> getDictDataByTypeId(Long dictTypeId);

    /**
     * 根据字典类型编码查询字典数据列表
     * @param dictTypeCode 字典类型编码
     * @return 字典数据列表
     */
    List<SysDictData> getDictDataByTypeCode(String dictTypeCode);

    /**
     * 根据字典类型编码和字典值查询字典数据
     * @param dictTypeCode 字典类型编码
     * @param dictValue 字典值
     * @return 字典数据对象
     */
    SysDictData getDictDataByTypeCodeAndValue(String dictTypeCode, String dictValue);

    /**
     * 根据字典类型编码和字典标签查询字典数据
     * @param dictTypeCode 字典类型编码
     * @param dictLabel 字典标签
     * @return 字典数据对象
     */
    SysDictData getDictDataByTypeCodeAndLabel(String dictTypeCode, String dictLabel);

    /**
     * 新增字典数据
     * @param sysDictData 字典数据信息
     * @param currentUserId 当前操作用户ID
     * @return 操作结果
     */
    boolean addDictData(SysDictData sysDictData, Long currentUserId);

    /**
     * 更新字典数据
     * @param sysDictData 字典数据信息
     * @param currentUserId 当前操作用户ID
     * @return 操作结果
     */
    boolean updateDictData(SysDictData sysDictData, Long currentUserId);

    /**
     * 删除字典数据（逻辑删除）
     * @param dictDataId 字典数据ID
     * @return 操作结果
     */
    boolean deleteDictData(Long dictDataId);

    /**
     * 批量删除字典数据
     * @param dictDataIds 字典数据ID列表
     * @return 操作结果
     */
    boolean batchDeleteDictData(List<Long> dictDataIds);

    /**
     * 修改字典数据状态
     * @param dictDataId 字典数据ID
     * @param status 状态
     * @param currentUserId 当前操作用户ID
     * @return 操作结果
     */
    boolean updateDictDataStatus(Long dictDataId, Integer status, Long currentUserId);

    /**
     * 检查字典值是否在指定字典类型中存在
     * @param dictTypeId 字典类型ID
     * @param dictValue 字典值
     * @param excludeId 排除的ID（用于更新时检查）
     * @return 存在返回true
     */
    boolean checkDictValueExists(Long dictTypeId, String dictValue, Long excludeId);

    /**
     * 获取所有启用的字典数据（用于缓存）
     * @return 字典数据列表
     */
    Map<String, List<SysDictData>> getAllEnabledDictData();

    /**
     * 根据标签模糊查询字典数据
     * @param dictLabel 字典标签
     * @return 字典数据列表
     */
    List<SysDictData> getDictDataByLabel(String dictLabel);

    /**
     * 刷新字典数据缓存
     * @return 操作结果
     */
    boolean refreshDictDataCache();

    /**
     * 批量更新字典数据排序
     * @param dictDataMap 字典数据ID和排序值的映射
     * @param currentUserId 当前操作用户ID
     * @return 操作结果
     */
    boolean batchUpdateDictSort(Map<Long, Integer> dictDataMap, Long currentUserId);
}